# 导入 tkinter
import tkinter as tk


# 导入实体类
from entity.Plane import Plane

# 编写窗口类
class Window:
    # 初始化方法
    def __init__(self, width, heigth, titleName):
        # 设置窗口属性
        self.width = width    # 窗口的宽度
        self.heigth = heigth  # 窗口的高度
        self.root = tk.Tk()
        self.root.title(titleName)
        self.root.geometry(str(self.width) + 'x' + str(self.heigth))
        # 存储游戏时间
        self.time = 0
        # 设置窗口的内容
        self.setui()
        # 设置记录按键被按下的情况
        self.setKeyList()
        # 设置监听事件 - 键盘响应事件
        self.setEvent()
        self.init()
    
    def setui(self):
        # 创建画布
        self.canvas = tk.Canvas(self.root, width=self.width, height=self.heigth, bg='white')
        # 显示画布
        self.canvas.pack()

    def setKeyList(self):
        # 保存按键是否被按下的字典
        self.keyList = {
            'w': False,
            's': False,
            'a': False,
            'd': False
        }

    def setEvent(self):
        # 键盘按下
        self.root.bind('<KeyPress>', self.keyPress)
        # 键盘松开
        self.root.bind('<KeyRelease>', self.keyRelease)

    # canvas绘制图片
    def show(self, obj):
        # canvas绘制的返回值，就是obj的id
        obj.id = self.canvas.create_image(obj.x, obj.y, image=obj.img)

    # 键盘按下的时候，记录按钮被按下
    def keyPress(self, e):
        if e.char in self.keyList:
            self.keyList[e.char] = True

    # 键盘离开的时候，记录按钮不被按下
    def keyRelease(self, e):
        if e.char in self.keyList:
            self.keyList[e.char] = False

    # 初始化方法
    def init(self):
        pass

    # 运行方法
    def run(self):
        # 设置游戏主循环 - 游戏里的对象能运行
        self.gameloop()
        # 设置窗口主循环 - 窗口能运行
        self.root.mainloop()

